home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / WD_SRC.ZIP / SYSTEM / TIMER.CPP < prev    next >
C/C++ Source or Header  |  1995-01-30  |  1KB  |  80 lines

  1. #include "..\Source\LastWolf.hpp"
  2.  
  3.  
  4. #define CONTROL_8253    0x43
  5. #define CONTROL_WORD    0x3C
  6.  
  7. #define COUNTER_0        0x40
  8.  
  9. #define TIME_KEEPER_INT    0x1C
  10.  
  11. #define ORIGINAL_TIMER_HZ       65534
  12. #define TIMER_182HZ             6555
  13. #define TIMER_60HZ        0x4DAE
  14. #define TIMER_30HZ        0x965C
  15. #define TIMER_20HZ        0xE90B
  16. #define TIMER_18HZ        0xFFFF
  17.  
  18. #define LOBYTE(n) (n & 0x00FF)
  19. #define HIBYTE(n) ((n>>8) & 0x00FF)
  20.  
  21.  
  22. #ifdef DOS
  23.  
  24. // Pointer to the old timer routine.
  25. void (__interrupt __far *Old_Isr)();
  26.  
  27.  
  28. // The new timer routine.
  29. void __interrupt Timer()
  30. {
  31.     timeCount++;
  32.     
  33.     if( timeCount % 10 == 0 )
  34.         Old_Isr();
  35. }
  36.  
  37. // Resets the timer count.
  38. void Change_Time( unsigned int new_count )
  39. {
  40.     outp( CONTROL_8253, CONTROL_WORD );
  41.     outp( COUNTER_0, LOBYTE(new_count) );
  42.     outp( COUNTER_0, HIBYTE(new_count) );
  43. }            
  44.  
  45.  
  46. void t_StartTimer()
  47. {
  48.     timeCount=0;
  49.  
  50.     Change_Time(TIMER_182HZ);
  51.  
  52.     Old_Isr = _dos_getvect( TIME_KEEPER_INT );
  53.     _dos_setvect( TIME_KEEPER_INT, Timer );
  54. }
  55.  
  56. void t_EndTimer()
  57. {
  58.     Change_Time( ORIGINAL_TIMER_HZ );
  59.     _dos_setvect( TIME_KEEPER_INT, Old_Isr );
  60. }
  61.  
  62.  
  63. #else // (#ifdef DOS)
  64.  
  65. void t_StartTimer()
  66. {
  67.     timeCount=0;
  68. }
  69.  
  70. void t_EndTimer()
  71. {
  72.     timeCount=1;
  73. }
  74.  
  75. #endif
  76.  
  77.  
  78.  
  79.  
  80.